package com.bbva.kyfb.kyfbdto.firmas.fachada.v01;

import java.io.Serializable;
import java.util.Date;

import javax.validation.constraints.Digits;
import javax.validation.constraints.Pattern;
import javax.xml.bind.annotation.XmlRootElement;

import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;

/**
 * Representa una busqueda de fichero u ordenes.
 *
 * @author xe35008
 * @version 1.0
 */
@XmlRootElement(name="infoFileRequest")
public class InfoFileRequest implements Serializable, ITipoFirmaAndNIF {

	/** The Constant serialVersionUID. */
	private static final long serialVersionUID = 1L;

	/** Canal o pais de la referencia que invoca al sistema. */
	private String sCanal;

	/** bancoInterno vinculado a la referencia. */
	private String sBancoInt;

	/** referencia para la que se realiza la peticion. */
	private String sReferencia;

	/** aplicacion que invoca. */
	private String sCodOrigen;

	/** tipo de orden vinculada a la peticion (filtro). */
	private String sTipoOrden;

	/** tipo de firma (filtro). */
	private String sTipoFirma;

	/** estado que se requiere en la busqueda (filtro). */
	private String sCodEstado;

	/** divisa (filtro). */
	private String sDivisa;
	/**
	 * tipo de fecha (filtro). Creacion o proceso
	 */
	private String sTipoFecha;

	/** rango de fecha (filtro). */
	private Date sFechaDesde;

	/** rango de fecha(filtro). */
	private Date sFechaHasta;

	/** rango de importe (filtro). */
	private Double sImporteDesde;

	/** rango de importe (filtro). */
	private Double sImporteHasta;

	/** codigo de usuario que ha internvenido en alguna operacion para la referencia. */
	private String sUsuarioOrdenante;

	/** Nif del usuario. */
	private String sNIFUsuario;


	/** rango de paginacion (filtro). */
	private int sPaginacionDesde;

	/** numero de elementos a devolver. */
	private int sPaginacionNumElementos;

	/** The s campo de ordenacion. */
	private String sValorOrdenacion;

	/** The s modo de ordenacion. */
	private String sModoOrdenacion;

	/**
	 * Constructor por defecto.
	 */
	public InfoFileRequest(){};


	/**
	 * Gets the s canal.
	 *
	 * @return the sCanal
	 */
	@NotEmpty
	@Digits(fraction=0,integer=4)
	@Length(min=1,max=4)
	public String getsCanal() {
		return sCanal;
	}


	/**
	 * Sets the s canal.
	 *
	 * @param sCanal the sCanal to set
	 */
	public void setsCanal(final String sCanal) {
		this.sCanal = sCanal;
	}


	/**
	 * Gets the s banco int.
	 *
	 * @return the sBancoInt
	 */
	@NotEmpty
	@Length(min=1,max=4)
	@Digits(fraction = 0, integer = 4)
	public String getsBancoInt() {
		return sBancoInt;
	}


	/**
	 * Sets the s banco int.
	 *
	 * @param sBancoInt the sBancoInt to set
	 */
	public void setsBancoInt(final String sBancoInt) {
		this.sBancoInt = sBancoInt;
	}


	/**
	 * Gets the s referencia.
	 *
	 * @return the sReferencia
	 */
	@NotEmpty
	@Length(min=1,max=8)
	@Digits(fraction=0,integer=8)
	public String getsReferencia() {
		return sReferencia;
	}


	/**
	 * Sets the s referencia.
	 *
	 * @param sReferencia the sReferencia to set
	 */
	public void setsReferencia(final String sReferencia) {
		this.sReferencia = sReferencia;
	}


	/**
	 * Gets the s cod origen.
	 *
	 * @return the sCodOrigen
	 */
	@NotEmpty
	@Length(min=1,max=4)
	//@Digits(fraction = 0, integer = 4)
	public String getsCodOrigen() {
		return sCodOrigen;
	}


	/**
	 * Sets the s cod origen.
	 *
	 * @param sCodOrigen the sCodOrigen to set
	 */
	public void setsCodOrigen(final String sCodOrigen) {
		this.sCodOrigen = sCodOrigen;
	}


	/**
	 * Gets the s tipo orden.
	 *
	 * @return the sTipoOrden
	 */
	public String getsTipoOrden() {
		return sTipoOrden;
	}


	/**
	 * Sets the s tipo orden.
	 *
	 * @param sTipoOrden the sTipoOrden to set
	 */
	public void setsTipoOrden(final String sTipoOrden) {
		this.sTipoOrden = sTipoOrden;
	}


	/**
	 * Gets the s tipo firma.
	 *
	 * @return the sTipoFirma
	 */
	@Override
	@NotEmpty
	@Length(min=2,max=2)
	@Pattern(regexp="FH|FS")
	public String getsTipoFirma() {
		return sTipoFirma;
	}


	/**
	 * Sets the s tipo firma.
	 *
	 * @param sTipoFirma the sTipoFirma to set
	 */
	public void setsTipoFirma(final String sTipoFirma) {
		this.sTipoFirma = sTipoFirma;
	}


	/**
	 * Gets the s cod estado.
	 *
	 * @return the sCodEstado
	 */
	public String getsCodEstado() {
		return sCodEstado;
	}


	/**
	 * Sets the s cod estado.
	 *
	 * @param sCodEstado the sCodEstado to set
	 */
	public void setsCodEstado(final String sCodEstado) {
		this.sCodEstado = sCodEstado;
	}


	/**
	 * Gets the s divisa.
	 *
	 * @return the sDivisa
	 */
	@Pattern(regexp="(\\p{Upper}{3})(\\|\\p{Upper}{3})*")
	public String getsDivisa() {
		return sDivisa;
	}


	/**
	 * Sets the s divisa.
	 *
	 * @param sDivisa the sDivisa to set
	 */
	public void setsDivisa(final String sDivisa) {
		this.sDivisa = sDivisa;
	}


	/**
	 * Gets the s tipo fecha.
	 *
	 * @return the sTipoFecha
	 */
	@Length(min=2,max=2)
	@Pattern(regexp="TO|FC|FP")
	public String getsTipoFecha() {
		return sTipoFecha;
	}


	/**
	 * Sets the s tipo fecha.
	 *
	 * @param sTipoFecha the sTipoFecha to set
	 */
	public void setsTipoFecha(final String sTipoFecha) {
		this.sTipoFecha = sTipoFecha;
	}


	/**
	 * Gets the s fecha desde.
	 *
	 * @return the sFechaDesde
	 */
	public Date getsFechaDesde() {
		return sFechaDesde;
	}


	/**
	 * Sets the s fecha desde.
	 *
	 * @param sFechaDesde the sFechaDesde to set
	 */
	public void setsFechaDesde(final Date sFechaDesde) {
		this.sFechaDesde = sFechaDesde;
	}


	/**
	 * Gets the s fecha hasta.
	 *
	 * @return the sFechaHasta
	 */
	public Date getsFechaHasta() {
		return sFechaHasta;
	}


	/**
	 * Sets the s fecha hasta.
	 *
	 * @param sFechaHasta the sFechaHasta to set
	 */
	public void setsFechaHasta(final Date sFechaHasta) {
		this.sFechaHasta = sFechaHasta;
	}


	/**
	 * Gets the s importe desde.
	 *
	 * @return the sImporteDesde
	 */
	public Double getsImporteDesde() {
		return sImporteDesde;
	}


	/**
	 * Sets the s importe desde.
	 *
	 * @param sImporteDesde the sImporteDesde to set
	 */
	public void setsImporteDesde(final Double sImporteDesde) {
		this.sImporteDesde = sImporteDesde;
	}


	/**
	 * Gets the s importe hasta.
	 *
	 * @return the sImporteHasta
	 */
	public Double getsImporteHasta() {
		return sImporteHasta;
	}


	/**
	 * Sets the s importe hasta.
	 *
	 * @param sImporteHasta the sImporteHasta to set
	 */
	public void setsImporteHasta(final Double sImporteHasta) {
		this.sImporteHasta = sImporteHasta;
	}


	/**
	 * Gets the s usuario ordenante.
	 *
	 * @return the sUsuarioOrdenante
	 */
	@Length(max=8)
	public String getsUsuarioOrdenante() {
		return sUsuarioOrdenante;
	}


	/**
	 * Sets the s usuario ordenante.
	 *
	 * @param sUsuarioOrdenante the sUsuarioOrdenante to set
	 */
	public void setsUsuarioOrdenante(final String sUsuarioOrdenante) {
		this.sUsuarioOrdenante = sUsuarioOrdenante;
	}


	/**
	 * Gets the s paginacion desde.
	 *
	 * @return the sPaginacionDesde
	 */
	public int getsPaginacionDesde() {
		return sPaginacionDesde;
	}


	/**
	 * Sets the s paginacion desde.
	 *
	 * @param sPaginacionDesde the sPaginacionDesde to set
	 */
	public void setsPaginacionDesde(final int sPaginacionDesde) {
		this.sPaginacionDesde = sPaginacionDesde;
	}

	/**
	 * Gets the s paginacion num elementos.
	 *
	 * @return the sPaginacionNumElementos
	 */
	public int getsPaginacionNumElementos() {
		return sPaginacionNumElementos;
	}


	/**
	 * Sets the s paginacion num elementos.
	 *
	 * @param sPaginacionNumElementos the sPaginacionNumElementos to set
	 */
	public void setsPaginacionNumElementos(final int sPaginacionNumElementos) {
		this.sPaginacionNumElementos = sPaginacionNumElementos;
	}



	/**
	 * Gets the s nif usuario.
	 *
	 * @return the sNIFUsuario
	 */
	//@NotNull
	//@NotEmpty
	//@Pattern(regexp="\\d{1,8}\\p{Alpha}\\|\\p{Alnum}+\\|\\p{Alnum}+")
	@Override
	public String getsNIFUsuario() {
		return sNIFUsuario;
	}


	/**
	 * Sets the s nif usuario.
	 *
	 * @param sNIFUsuario the sNIFUsuario to set
	 */
	public void setsNIFUsuario(final String sNIFUsuario) {
		this.sNIFUsuario = sNIFUsuario;
	}


	/**
	 * Gets the s valor de ordenacion.
	 *
	 * @return the sValorOrdenacion
	 */
	@Pattern(regexp="TIOR|ESTA|DIVI|FECR|FEPR|IMPO|NOFI|ASUN|NUOR")
	public String getsValorOrdenacion() {
		return sValorOrdenacion;
	}

	/**
	 * Sets the s valor ordenacion.
	 *
	 * @param sValorOrdenacion the sValorOrdenacion to set
	 */
	public void setsValorOrdenacion(final String sValorOrdenacion) {
		this.sValorOrdenacion = sValorOrdenacion;
	}

	/**
	 * Gets the s Modo de ordenacion.
	 *
	 * @return the sModoOrdenacion
	 */
	@Pattern(regexp="ASC|DESC")
	public String getsModoOrdenacion() {
		return sModoOrdenacion;
	}

	/**
	 * Sets the s modo ordenacion.
	 *
	 * @param sModoOrdenacion the sModoOrdenacion to set
	 */
	public void setsModoOrdenacion(final String sModoOrdenacion) {
		this.sModoOrdenacion = sModoOrdenacion;
	}


	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return "InfoFileRequest [sCanal=" + sCanal + ", sBancoInt=" + sBancoInt
				+ ", sReferencia=" + sReferencia + ", sCodOrigen=" + sCodOrigen
				+ ", sTipoOrden=" + sTipoOrden + ", sTipoFirma=" + sTipoFirma
				+ ", sCodEstado=" + sCodEstado + ", sDivisa=" + sDivisa
				+ ", sTipoFecha=" + sTipoFecha + ", sFechaDesde=" + sFechaDesde
				+ ", sFechaHasta=" + sFechaHasta + ", sImporteDesde="
				+ sImporteDesde + ", sImporteHasta=" + sImporteHasta
				+ ", sUsuarioOrdenante=" + sUsuarioOrdenante + ", sNIFUsuario="
				+ sNIFUsuario + ", sPaginacionDesde=" + sPaginacionDesde
				+ ", sPaginacionNumElementos=" + sPaginacionNumElementos
				+ ", sValorOrdenacion=" + sValorOrdenacion
				+ ", sModoOrdenacion=" + sModoOrdenacion + "]";
	}

}
